home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_126 / suplib / bmov.asm < prev    next >
Assembly Source File  |  1992-05-06  |  1KB  |  64 lines

  1.  
  2. ;BMOV.ASM
  3. ;      4    8    12
  4. ;BMOV(src,dest,bytes)
  5. ;
  6. ;   Matthew Dillon
  7. ;
  8. ;   -Handles ascending/descending moves
  9. ;   -Optimizes the move if addresses longword boundries and #bytes
  10. ;    is a multiple of 4.
  11. ;   -Completely tested
  12.  
  13.     xdef  _bmov
  14.  
  15. _bmov
  16.     movem.l 4(A7),A0/A1    ;source, destination
  17.     move.l    12(A7),D0    ;bytes
  18.     clr.b    D1        ;long word boundry flag
  19.     andi.b    #3,15(A7)    ;byte count multiple of 4?
  20.     bne    notlwb
  21.     andi.b    #3,7(A7)    ;source mulitple of 4?
  22.     bne    notlwb
  23.     andi.b    #3,11(A7)    ;destination multiple of 4?
  24.     seq.b    D1        ;set longword boundry flag if true
  25. notlwb    cmp.l    A0,A1
  26.     beq    end        ;trivial case
  27.     ble    ascend        ;ascending copy
  28.     add.l    D0,A0        ;descending copy
  29.     add.l    D0,A1
  30.  
  31. decend    tst.b    D1        ;DESCEND
  32.     beq    decbyte
  33. declong lsr.l    #2,D0        ;DESCEND LONGWORD
  34.     bra    ab00
  35. ab0    move.l    -(A0),-(A1)
  36. ab00    dbf.w    D0,ab0
  37.     sub.l    #$10000,D0
  38.     bpl    ab0
  39. end    rts
  40.  
  41. ab1    move.b    -(A0),-(A1)    ;DESCEND BYTE
  42. decbyte dbf.w    D0,ab1
  43.     sub.l    #$10000,D0
  44.     bpl    ab1
  45.     rts
  46.  
  47. ascend    tst.b    D1        ;ASCEND
  48.     beq    ascbyte
  49. asclong lsr.l    #2,D0        ;ASCEND LONGWORD
  50.     bra    ab22
  51. ab2    move.l    (A0)+,(A1)+
  52. ab22    dbf.w    D0,ab2
  53.     sub.l    #$10000,D0
  54.     bpl    ab2
  55.     rts
  56.  
  57. ab3    move.b    (A0)+,(A1)+    ;ASCEND BYTE
  58. ascbyte dbf.w    D0,ab3
  59.     sub.l    #$10000,D0
  60.     bpl    ab3
  61.     rts
  62.  
  63.  
  64.